package org.lim.infrastructure.config;

import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class CacheConfig {
    private String keyPrefix;
    private int baseExpireTime; // 基础过期时间（秒）
    private int randomExpireTime; // 随机过期时间范围（秒）
    private boolean useLocalCache; // 是否使用本地缓存
    private boolean useRedisCache; // 是否使用Redis缓存

    // 分布式锁相关配置
    private long lockWaitTime; // 等待获取锁的最长时间（秒）
    private long lockLeaseTime; // 锁的自动释放时间（秒）
    private long retryDelayMs; // 获取锁失败后重试延迟时间（毫秒）

    public static CacheConfig defaultConfig(String keyPrefix) {
        return CacheConfig.builder()
                .keyPrefix(keyPrefix)
                .baseExpireTime(300)
                .randomExpireTime(300)
                .useLocalCache(true)
                .useRedisCache(true)
                .lockWaitTime(3) // 等待锁3秒
                .lockLeaseTime(10) // 锁自动释放10秒
                .retryDelayMs(100) // 重试延迟100ms
                .build();
    }

    public static CacheConfig fastConfig(String keyPrefix) {
        return CacheConfig.builder()
                .keyPrefix(keyPrefix)
                .baseExpireTime(60)
                .randomExpireTime(60)
                .useLocalCache(true)
                .useRedisCache(true)
                .lockWaitTime(1) // 快速模式等待锁1秒
                .lockLeaseTime(5) // 锁自动释放5秒
                .retryDelayMs(50) // 重试延迟50ms
                .build();
    }

    public static CacheConfig longTermConfig(String keyPrefix) {
        return CacheConfig.builder()
                .keyPrefix(keyPrefix)
                .baseExpireTime(3600) // 1小时
                .randomExpireTime(1800) // 随机30分钟
                .useLocalCache(true)
                .useRedisCache(true)
                .lockWaitTime(5) // 长期缓存等待锁5秒
                .lockLeaseTime(15) // 锁自动释放15秒
                .retryDelayMs(200) // 重试延迟200ms
                .build();
    }
}